package org.csu.mypetstore.controller;
import jdk.nashorn.internal.scripts.JO;
import net.sf.json.JSON;
import org.csu.mypetstore.domain.Inventory;
import org.csu.mypetstore.domain.Item;
import org.csu.mypetstore.service.ItemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import net.sf.json.JSONObject;

import java.util.List;

@Controller
@RequestMapping("/item")
public class ItemController {
    @Autowired
    private ItemService itemService;

    @GetMapping
    @ResponseBody
    public String get(String type, String id) {
        if(type.equals("itemId")) {
            Item item = itemService.getItemByItemId(id);
            JSONObject jsonObject = new JSONObject();
            if(item == null) {
                jsonObject.put("status", "NOK");
                jsonObject.put("msg", "该宠物不存在!");
                return jsonObject.toString();
            }
            jsonObject.put("status", "OK");
            jsonObject.put("msg", "该宠物信息获取成功!");
            jsonObject.put("data", item);
            return jsonObject.toString();
        }
        else if(type.equals("productId")) {
            List<Item> itemList = itemService.getItemListByProduct(id);
            JSONObject jsonObject = new JSONObject();
            if(itemList == null) {
                jsonObject.put("status", "NOK");
                jsonObject.put("msg", "商品ID不存在或该商品ID下还没有宠物");
                return jsonObject.toString();
            }
            jsonObject.put("status", "OK");
            jsonObject.put("msg", "该商品下的宠物列表获取成功!");
            jsonObject.put("data", itemList);
            return jsonObject.toString();
        }
        else if(type.equals("quantity")) {
            int quantity = itemService.getQuantityByItemId(id);
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("status", "OK");
            jsonObject.put("msg", "该宠物的库存数量获取成功!");
            jsonObject.put("data", quantity);
            return jsonObject.toString();
        }
        else if(type.equals("all")){
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("status", "OK");
            jsonObject.put("msg", "宠物列表获取成功!");
            jsonObject.put("data", itemService.getAll());
            return jsonObject.toString();
        }
        else {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("status", "NOK");
            jsonObject.put("msg", "请求类型错误,请刷新重试!");
            return jsonObject.toString();
        }
    }

    @PutMapping
    @ResponseBody
    public String put(Item item) {
        try {
            itemService.updateItem(item);
            itemService.updateQuantity(item.getItemId(), item.getQuantity());
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("status", "OK");
            jsonObject.put("msg", "宠物信息修改成功!");
            return jsonObject.toString();
        } catch (Exception e) {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("status", "NOK");
            if(e instanceof DataIntegrityViolationException){
                jsonObject.put("msg", "商品ID或供应商不存在，请检查!");
            }
            else {
                jsonObject.put("msg", "出现未知异常,请刷新重试!");
            }
            return jsonObject.toString();
        }
    }

    @DeleteMapping
    @ResponseBody
    public String delete(String type, String id) {
        if(type.equals("itemId")){
            try {
                itemService.deleteItemByItemId(id);
                JSONObject jsonObject = new JSONObject();
                jsonObject.put("status", "OK");
                jsonObject.put("msg", "宠物信息删除成功!");
                return jsonObject.toString();
            } catch (Exception e) {
                JSONObject jsonObject = new JSONObject();
                jsonObject.put("status", "NOK");
                jsonObject.put("msg", "出现未知异常,请刷新重试!");
                return jsonObject.toString();
            }
        }
        else if(type.equals("productId")) {
            itemService.deleteItemByProductId(id);
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("status", "OK");
            jsonObject.put("msg", "宠物信息删除成功!");
            return jsonObject.toString();
        }
        else {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("status", "NOK");
            jsonObject.put("msg", "出现未知异常,请刷新重试!");
            return jsonObject.toString();
        }
    }

    @PutMapping("/quantity")
    @ResponseBody
    public String updateQuantity(String itemId, int quantity) {
        JSONObject jsonObject = new JSONObject();
        try{
            itemService.updateQuantityRelative(itemId, quantity);
            jsonObject.put("status", "OK");
            jsonObject.put("msg", "更新成功");
        } catch(Exception e) {
            e.printStackTrace();
            jsonObject.put("status", "NOK");
            jsonObject.put("msg", "更新失败");
        }
        return jsonObject.toString();
    }

    @PostMapping
    @ResponseBody
    public String post(Item item) {
        JSONObject jsonObject = new JSONObject();
        try{
            itemService.addItem(item);
            jsonObject.put("status", "OK");
            jsonObject.put("msg", "新增宠物成功!");
            return jsonObject.toString();
        }
        catch(Exception e) {
            e.printStackTrace();
            jsonObject.put("status", "NOK");
            if(e instanceof DuplicateKeyException){
                jsonObject.put("msg", "宠物ID重复，请重新输入!");
            }
            else if(e instanceof DataIntegrityViolationException){
                jsonObject.put("msg", "商品ID或供应商不存在，请检查!");
            }
            else {
                jsonObject.put("msg", "出现未知异常,请刷新重试!");
            }
            return jsonObject.toString();
        }
    }
}
